﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace WindowsGame1.Personagem
{
    class Principal : Sprite
    {

        SoundEffect efeitoSonoro;
        public Vector2 posMouse;
        public Vector2 diferenca;
        public bool isOnGround;
        //int vida;
        //int pontos;
        public Vector2 PosMouse
        {
            get
            {
                return posMouse;
            }

            set
            {
                posMouse = value;
            }
        }
        public Vector2 Posicao
        {
            get
            {
                return posicao;
            }

            set
            {
                posicao = value;
            }
        }

        public animacao andando;
        public animacao parado;

        public Principal(Texture2D textura, GameWindow window)
            : base(textura)
        {
            this.textura = textura;
            this.window = window;
            this.isOnGround = true;
            drawCollisionBounds = true;
            gravityEnabled = true;

            andando = new animacao();
            andando.qtd_quadros = 8;
            andando.quadros_seg = 8;
            andando.Y = 0;
            andando.quadro_X = textura.Width / andando.qtd_quadros;
            andando.quadro_Y = textura.Height;

            destino = new Rectangle(0, 0, andando.quadro_X, andando.quadro_Y);

        }

        public override void Update(GameTime gameTime) { }

        public void Update(GameTime gameTime, KeyboardState teclado, KeyboardState teclado_anterior)
        {
            colisao = new Rectangle((int)posicao.X, (int)posicao.Y, 64, 64);
            posicao.Y -= velocidade.Y;
            if (teclado.IsKeyDown(Keys.Right))
            {
                posicao.X += velocidade.X * (float)gameTime.ElapsedGameTime.Milliseconds;
                this.direita = true;
            }

            if (teclado.IsKeyDown(Keys.Left))
            {
                posicao.X -= velocidade.X * (float)gameTime.ElapsedGameTime.Milliseconds;
                this.direita = false;
            }

            if (teclado.IsKeyDown(Keys.Up) && isOnGround == true)
            {
                velocidade.Y = 30;
            }

            /*if (teclado.IsKeyDown(Keys.Down))
            {
                posicao.Y += velocidade.Y * (float)gameTime.ElapsedGameTime.Milliseconds;
            }*/

            if (posicao.X >= window.ClientBounds.Width - destino.Width)
            {
                posicao.X = window.ClientBounds.Width - destino.Width;
            }

            if (posicao.Y >= window.ClientBounds.Height - destino.Height)
            {
                posicao.Y = window.ClientBounds.Height - destino.Height;
            }

          /*if (posicao.X >= window.ClientBounds.Width - 268)
            {
                posicao.X = window.ClientBounds.Width - 268;
            }*/

            if (posicao.Y <= 0)
            {
                posicao.Y = 0;
            }
            if (posicao.X <= 0)
            {
                posicao.X = 0;
            }

            if (gravityEnabled)
            {
                velocidade.Y -= Game1.instance.gravidade.Y;          
                
                for (int i = 0; i < Cenario.lista.Count; i++)
                {
                    if(this.colisao.Intersects(Cenario.lista[i].collisionBounds))
                    {
                        if (Cenario.lista[i].souPlataforma)
                        {
                            //posicao.Y = Game1.instance.posicaoP.Y;
                            //posicao.Y -= Game1.instance.gravidade.Y;
                            Console.WriteLine("oi");
                            isOnGround = true;
                        }
                    }
                    if (!this.colisao.Intersects(Cenario.lista[i].collisionBounds))
                    {
                        if (Cenario.lista[i].souPlataforma)
                        {
                            //posicao.Y -= Game1.instance.gravidade.Y;
                            Console.WriteLine("oi2");
                            isOnGround = false;
                        }
                    }
                }
            }

            //posicao += velocidade;


        }

        public bool Bateu(Cenario plataforma)
        {

            if (this.Colisao.Intersects(plataforma.collisionBounds))
            {

                return true;

            }

            else
            {

                return false;

            }


        }
        //public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
        //{
        //     spriteBatch.Draw(imagem, posicao, Color.Yellow);
        //}
    }
}